import os

import pytest
from utils.database import Database
from config.config import *
from utils.config_parser import GetConfig
from allure_pytest.listener import AllureListener

@pytest.fixture(scope="session",autouse=True)
def destory_data():

    yield

    Database().excute_sql(SQL1,SQL2)

def pytest_configure(config):
    """
    设置环境变量
    :param config:
    :return:
    """
    env = config.getoption("--env") #获取参数传进来的值
    os.environ["ENV"] = env
    cfg = GetConfig()

    # 根据传进来的不同参数读取配置文件，设置不同的环境变量
    # 环境变量必须是字符串，不能是字典
    if env == "test":
        os.environ["URL"] = cfg.get_base_url("test_base_url")
        os.environ["DATABASE"] = str(cfg.get_database_data("test_database"))
    elif env =="sting":
        os.environ["URL"] = cfg.get_base_url("sting_base_url")
        os.environ["DATABASE"] = str(cfg.get_database_data("sting_database"))
    elif env =="prod":
        os.environ["URL"] = cfg.get_base_url("prod_database")
        os.environ["DATABASE"] = str(cfg.get_database_data("prod_database"))

    #设置mock的基础url环境变量
    os.environ["MOCK_URL"] = cfg.get_base_url("mock_url")




# 钩子函数
def pytest_addoption(parser):
    parser.addoption(
        "--env",
        action = "store",
        default = "test",
        help = "运行时的环境配置参数"
    )

def pytest_collection_modifyitems(config,items):
    for item in items:
        case = item.callspec.params.get("case",{}) #固定写法，获取pytest.mark.parametrize的case，如果没有值就用{}代替
        # 判断is_true不为True的时候，跳过测试
        if not case.get("is_true"):
            item.add_marker(pytest.mark.skip(reason="跳过测试"))

        # 判断失败重试的次数大于0的时候去进行失败重试
        if case.get("reruns")>0:
            item.add_marker(pytest.mark.flaky(reruns=case.get("reruns")))







